package cin.ufpe.br.projetoESS.Dados;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import cin.ufpe.br.projetoESS.Entidades.FolhaPagamento;
import cin.ufpe.br.projetoESS.Entidades.Funcionario;
import cin.ufpe.br.projetoESS.Entidades.Relatorios.DadosFinanceiros;

public class RepositorioFolhaPagamento {
	
	
	private Connection conn;
	private RepositorioFuncionario repositorioFuncionario;

	public RepositorioFolhaPagamento(Connection conn, RepositorioFuncionario repositorioFuncionario)
	{
		this.conn = conn;
		this.repositorioFuncionario = repositorioFuncionario;
	}



	public void inserirFolhaPagamento(FolhaPagamento f) throws SQLException
	{
		Statement statement = conn.createStatement();


		String queryInsertFolhaPagamento = "INSERT INTO FOLHAPAGAMENTO (salario,vencimento,bonus,cpf_func)"
			+ "VALUES("
			+ f.getSalario() + ","
			+ "TO_DATE('"+ f.getVencimento() + "','DD/MM/YYYY'),"
			+ f.getBonus() + ","
			+ f.getFuncionario().getCpf() + ")";

		System.out.println(queryInsertFolhaPagamento);
		statement.executeUpdate(queryInsertFolhaPagamento);
		conn.commit();		
	}
	
	public FolhaPagamento buscarFolhaPagamento(int cpfFuncionario) throws SQLException
	{
		Statement statement = conn.createStatement();
		ResultSet resultSet;
		
		Funcionario funcionario = repositorioFuncionario.buscarFuncionario(cpfFuncionario);
		FolhaPagamento folhaPagamento = null;
		
		String queryBuscarFolhaPagamento = "SELECT fp.*, TO_CHAR(vencimento, 'DD/MM/YYYY') as vencimento2 FROM FolhaPagamento fp WHERE cpf_func = " + cpfFuncionario;
		
		resultSet = statement.executeQuery(queryBuscarFolhaPagamento);

		if(resultSet.next()){
			double salario = resultSet.getDouble("salario");
			String vencimento = resultSet.getString("vencimento2");
			double bonus = resultSet.getDouble("bonus");
			
			folhaPagamento = new FolhaPagamento(salario, vencimento, bonus, funcionario);
		}
		
		return folhaPagamento;
		
	}
	
	public DadosFinanceiros[] getDadosGastosFolhaPagamento() throws SQLException{

		DadosFinanceiros[] dadosFinanceiros = null;
		
		Statement statement = conn.createStatement();		
		ResultSet resultSet;
		
		String queryQtdFolhasPagamento = "SELECT COUNT(*) AS qtdFolhasPagamento FROM FolhaPagamento";
		resultSet = statement.executeQuery(queryQtdFolhasPagamento);
		resultSet.next();
		
		int qtdFolhasPagamento = resultSet.getInt("qtdFolhasPagamento");
		
		if(qtdFolhasPagamento > 0){
			
			dadosFinanceiros = new DadosFinanceiros[qtdFolhasPagamento];
			
			String queryFolhasPagamento = "SELECT cpf_func, (salario + bonus) AS pagamento_total FROM FolhaPagamento";
			resultSet = statement.executeQuery(queryFolhasPagamento);
							
			int i = 0;
			
			while(resultSet.next()){
				
				String cpfFunc = resultSet.getString("cpf_func");
				double pagamentoTotal = resultSet.getDouble("pagamento_total");
				
				dadosFinanceiros[i] = new DadosFinanceiros(cpfFunc, pagamentoTotal);
				
				i++;
			}
		}
		
		return dadosFinanceiros;

	}

}
